// 判断 value 是否为 0
import {useEffect, useState} from "react";

export const isFalsy = value => value === 0 ? false : !value
/**
 * * 清理对象中值为空的属性
 * @param object
 * @returns {*}
 */
export const cleanObject = (object) => {
    const result = {...object}
    Object.keys(result).forEach(key => {
        const value = result[key];
        // 排除 value 为 0 的情况
        if (isFalsy(value)) {
            delete result[key];
        }
    });
    return result
}

/**
 * * 组件挂载时执行（执行一次）
 * @param callback 回调函数
 */
export const useMount = (callback) => {
    useEffect(() => {
        callback()
    }, []);
}

/**
 * * 防抖函数
 * @param value 原始值
 * @param delay 延迟事件
 * @returns {unknown} 被设置为监控防抖的值
 */
export const useDebounce = (value, delay) => {
    // 创建一个 state 变量，用于存储防抖后(延迟后)的值
    const [debouncedValue, setDebouncedValue] = useState(value)
    useEffect(() => {
        const timeout = setTimeout(() => setDebouncedValue(value), delay)
        // 在重新执行 useEffect 前，React 会先调用上一次 useEffect 返回的清理函数，然后再执行新的 useEffect 函数
        return () => clearTimeout(timeout)
    }, [value, delay])
    return debouncedValue;
}